{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "Text provided under a Creative Commons Attribution license, CC-BY.  All code is made available under the FSF-approved BSD-3 license.  (c) Lorena A. Barba, Gilbert F. Forsyth 2017. Thanks to NSF for support via CAREER award #1149784."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[@LorenaABarba](https://twitter.com/LorenaABarba)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "12 steps to Navier–Stokes\n",
    "=====\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Did you experiment in Steps [1](./01_Step_1.ipynb) and [2](./02_Step_2.ipynb) using different parameter choices? If you did, you probably ran into some unexpected behavior. Did your solution ever blow up? (In my experience, CFD students *love* to make things blow up.)\n",
    "\n",
    "You are probably wondering why changing the discretization parameters affects your solution in such a drastic way. This notebook complements our [interactive CFD lessons](https://github.com/barbagroup/CFDPython) by discussing the CFL condition. And learn more by watching Prof. Barba's YouTube lectures (links below). "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Convergence and the CFL Condition\n",
    "----\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the first few steps, we've been using the same general initial and boundary conditions.  With the parameters we initially suggested, the grid has 41 points and the timestep is 0.25 seconds.  Now, we're going to experiment with increasing the size of our grid.  The code below is identical to the code we used in [Step 1](./01_Step_1.ipynb), but here it has been bundled up in a function so that we can easily examine what happens as we adjust just one variable: **the grid size**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy                 #numpy is a library for array operations akin to MATLAB\n",
    "from matplotlib import pyplot    #matplotlib is 2D plotting library\n",
    "%matplotlib inline\n",
    "\n",
    "def linearconv(nx):\n",
    "    dx = 2 / (nx - 1)\n",
    "    nt = 20    #nt is the number of timesteps we want to calculate\n",
    "    dt = .025  #dt is the amount of time each timestep covers (delta t)\n",
    "    c = 1\n",
    "\n",
    "    u = numpy.ones(nx)      #defining a numpy array which is nx elements long with every value equal to 1.\n",
    "    u[int(.5/dx):int(1 / dx + 1)] = 2  #setting u = 2 between 0.5 and 1 as per our I.C.s\n",
    "\n",
    "    un = numpy.ones(nx) #initializing our placeholder array, un, to hold the values we calculate for the n+1 timestep\n",
    "\n",
    "    for n in range(nt):  #iterate through time\n",
    "        un = u.copy() ##copy the existing values of u into un\n",
    "        for i in range(1, nx):\n",
    "            u[i] = un[i] - c * dt / dx * (un[i] - un[i-1])\n",
    "        \n",
    "    pyplot.plot(numpy.linspace(0, 2, nx), u);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's examine the results of our linear convection problem with an increasingly fine mesh.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(41) #convection using 41 grid points"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is the same result as our Step 1 calculation, reproduced here for reference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6w0lEQVR4nO3de3hU5b33/8+amWSSQA4EyJFwUtCWQwxaKFq3WFFEyiOPfbbag2DVtrZqa+mRa++iPP1dxVp33e3e2MOuirYeilagVYtSFfhJsf5QokQUQQKEnIBAzmSSzNy/P5KZJJKETJiZNYf367pyYSZrMt/lSpgP9/2972UZY4wAAABs4rC7AAAAkNgIIwAAwFaEEQAAYCvCCAAAsBVhBAAA2IowAgAAbEUYAQAAtiKMAAAAW7nsLmAofD6fqqqqlJ6eLsuy7C4HAAAMgTFGTU1NKigokMMx8PhHTISRqqoqFRUV2V0GAAAYhoqKCo0bN27Ar8dEGElPT5fUdTIZGRk2VwMAAIaisbFRRUVFgffxgcREGPFPzWRkZBBGAACIMWdqsaCBFQAA2IowAgAAbEUYAQAAtiKMAAAAWxFGAACArQgjAADAVoQRAABgK8IIAACwFWEEAADYKqgwsnr1an3qU59Senq6cnJytGTJEu3du/eMz3vmmWd0/vnnKyUlRTNmzNCLL7447IIBAEB8CSqMbN26VXfccYfeeOMNbd68WR0dHbrqqqvU0tIy4HP+8Y9/6Atf+IJuvfVW7dq1S0uWLNGSJUtUVlZ21sUDAIDYZxljzHCffOzYMeXk5Gjr1q36l3/5l36PueGGG9TS0qLnn38+8NinP/1pXXDBBfrNb34zpNdpbGxUZmamGhoauDcNAAAxYqjv32d1o7yGhgZJUnZ29oDH7NixQ8uXL+/z2IIFC7Rhw4YBn+PxeOTxeAKfNzY2nk2ZAHBGbR1eVZxo1cG6Vh2qa1F1Q5t8QfxbzVLfG4E5LMnhsGRZXV9zWJLD6vrT5XTI7XIoJckZ+DMlySG3y6m0ZKcKslKVn5kil5O2PiSGYYcRn8+nu+++W5dccommT58+4HE1NTXKzc3t81hubq5qamoGfM7q1au1atWq4ZYGAIMyxugv71Tpn+UndPB4iw7Vtaqq4ZSGP04cei6HpXGjUlWUnabx2WmaMLrrz5njslSQlWp3eUBIDTuM3HHHHSorK9Prr78eynokSStWrOgzmtLY2KiioqKQvw6AxOPzGf3f5/do7T8Onva1kW6XJo5J04TRIzQuK1Uu5+C3Pff7eIjxGcnISEbyGSNf95/GSF6fUafPJ0+HT22d3sCfbR0+eTq9am7rVFV9m9q9Ph2s6xqp6c1hSQum5enWz0zShRNGnfHW7EAsGFYYufPOO/X8889r27ZtGjdu3KDH5uXlqba2ts9jtbW1ysvLG/A5brdbbrd7OKUBwIC8PqMVz72rdTuPSJJuvniiZhRmauKYNE0cPULZI5Kj4s3d6zOqbWzTobpWVZxo1aETLTp84pTKjzerrLJRfyur0d/KalRclKVbPzNJC6fnKYkpHcSwoBpYjTG66667tH79em3ZskVTpkw543NuuOEGtba26q9//WvgsYsvvlgzZ86kgRVAxLR3+vSdP5Xqhd3VcljSz/9PsT5/4eD/mIpGe2ua9Mjr5VpfWqn2Tp8kqSAzRcsunqgbZ49XZmqSzRUCPYb6/h1UGPnmN7+pJ598Uhs3btR5550XeDwzM1OpqV1zmEuXLlVhYaFWr14tqWtp72WXXab77rtPixYt0tNPP62f/vSnevvttwftNRnOyQBAf9o6vLr9j29py95jSnJa+tWNJVo4I9/uss7K8WaP/vjGIf3xjUM63twuSRqR7NR/XF+sq6fH9rkhfoQljAw0fPnoo4/q5ptvliTNmzdPEydO1Nq1awNff+aZZ/Tv//7vOnjwoKZMmaL7779f11xzzVBfljACYNia2jp022M79c/yE0pJcui3N12ky6aOtbuskGnr8OovpVV6+PVy7a1tktvl0DO3z9XMcVl2lwaEJ4zYhTACYDjqW9u17JE39c6RBqW7XXr45k9p9qSBtyKIZV6f0Vcf36lXPziq3Ay3/nLnZ5SbkWJ3WUhwQ33/puMJQFw61uTRDb99Q+8cadCotCQ9+dVPx20QkSSnw9Ivb7xAU3JGqrbRo689vlNtHV67ywKGhDACIC79Py/s0d7aJuWku7Xu63M1Y1ym3SWFXXpKkn6/7CJlpSXpnSMN+uGf31UMDH4DhBEA8edUu1cvv9e1pcCvv3yhpuSm21xR5EwYPUIPfWmWXA5LG0ur9OutH9ldEnBGhBEAcWfL3qM61eHVuFGpmjU+y+5yIu7ic8bo3v81TZL085f26uX3Bt7xGogGhBEAcef53dWSpEUz86NiEzM7fPnTE7R07gQZI939p1J9UMM9vhC9CCMA4sqpdq9eff+oJOlzMwpsrsZeP/7cJ3XxOaPV2u7VbY/tVF2z58xPAmxAGAEQV17rnqIpyk7V9MLE3gogyenQQ1+apQmj03Tk5Cl984m35fPR0IroQxgBEFdeeLd7imZGQcJO0fSWlZash5ddpNQkp/5ZfkI7D520uyTgNIQRAHGjtb1Tr37QNUWzKMa3ew+lc3PStbi46//Hc28fsbka4HSEEQBx47UPjulUh1fjs9MSform466b1XVTwBferWYzNEQdwgiAuPFi9yqaa2Yk7iqagcyemK3CrFQ1eTq1eU+t3eUAfRBGAMSF1vZOvfJB15vs52YyRfNxDoel62YVSmKqBtGHMAIgLrz2wTG1dfg0PjtN0wqYounP/y7pCiPb9h3X0aY2m6sBehBGAMSFF3ZXSUrsjc7OZPLYkSoZnyWvz+gvpVV2lwMEEEYAxDxW0Qydv5H1ubcrba4E6EEYARDzXv3gqNo6fJowmimaM1k8M19JTkt7qhv1fjVbxCM6EEYAxDxW0QxdVlqyrjg/V5K0fhejI4gOhBEAMY0pmuD5V9Ws31WpTq/P5moAwgiAGMcUTfDmnZejUWlJOtbk0faP6uwuByCMAIhtPfeiYYpmqJJdDv2v4q47GrPnCKIBYQRAzGrxdOq1vV1TNNcwRRMU/6qal96rUVNbh83VINERRgDELP8UzUSmaII2c1ymzhk7Qm0dPv2trMbucpDgCCMAYharaIbPsqxee44wVQN7EUYAxKQWT69VNNyLZliWlBTKsqQ3DpzQkZOtdpeDBEYYARCTyiob5On0KT8zRZ/MZ4pmOAqzUjV38mhJ0np2ZIWNCCMAYtK+o82SpPPz0pmiOQuBqZpdlTLG2FwNEhVhBEBM2lfbJEmamptucyWx7erpeUpNcqr8eIt2VdTbXQ4SFGEEQEz6sLZrZGQKYeSsjHS7dPX0PEnS8+9U21wNEhVhBEBM2nfUPzIy0uZKYt+/TB0jSXrnSL29hSBhEUYAxJwTLe063twuSTpnLGHkbM0ozJQk7alqlNdH3wgijzACIOb4+0XGjUrVCLfL5mpi36QxI5WW7NSpDq8+OtZsdzlIQIQRADHnw+6VNDSvhobTYQV2sC2rbLC5GiQiwgiAmOMfGZlCv0jITO+eqtlNGIENCCMAYs4+/0qaHEZGQsXfN8LICOxAGAEQc1hJE3r+MPIeTaywAWEEQEzpvZLm3BzCSKhMHtvVxNra7lX5cZpYEVmEEQAx5cPufpGi7FSlJbOSJlScDitwjx/6RhBphBEAMSXQvEq/SMgFmliPNNpcCRINYQRATPHfII+VNKE3nSZW2IQwAiCm+KdppjIyEnI9TawN8tHEiggijACIKf5lvWx4FnrnjB2hlCSHWtq9OnC8xe5ykEAIIwBiRl2zR3Ut3fekyRlhczXxx+V0BJpYmapBJBFGAMQMf78IK2nCZwY7scIGhBEAMWMf/SJhx7bwsANhBEDM+NC/DTz9ImEzY1xXGNlT1UgTKyKGMAIgZgRW0rCsN2zOHTtSKUkONXs6dbCOJlZEBmEEQMzYf5Qb5IWby+nQJ9iJFRFGGAEQE/wraSyLe9KEG3fwRaQRRgDEBH+/SNGoNKUmO22uJr7RxIpII4wAiAn7jtIvEimBnVgraWJFZBBGAMQE/86r59IvEnZTckbK7XKoydOpQyda7S4HCYAwAiAmsJImcmhiRaQRRgDEBP/uq9yTJjJoYkUkEUYARL3jzR6d6F5Jc85YRkYiYXph98jIEcIIwo8wAiDq7WMlTcT5V9SUVTXIGJpYEV6EEQBRj5U0kTc1N13JLoea2jp1qI4mVoRX0GFk27ZtWrx4sQoKCmRZljZs2HDG5zzxxBMqLi5WWlqa8vPzdcstt6iurm449QJIQP7mVe5JEzlJToc+kdf1/5smVoRb0GGkpaVFxcXFWrNmzZCO3759u5YuXapbb71V7733np555hm9+eab+upXvxp0sQASk3/DM0ZGIms6TayIEFewT1i4cKEWLlw45ON37NihiRMn6lvf+pYkadKkSfr617+un/3sZ8G+NIAEZIzRPv/ICHuMRNSMXn0jQDiFvWdk7ty5qqio0IsvvihjjGpra/Xss8/qmmuuCfdLA4gDdS3tOtnawUoaG/SMjDTSxIqwCnsYueSSS/TEE0/ohhtuUHJysvLy8pSZmTnoNI/H41FjY2OfDwCJyd8vMj6blTSRNjU3XclOhxpOdajixCm7y0EcC3sY2bNnj7797W9r5cqVeuutt7Rp0yYdPHhQt99++4DPWb16tTIzMwMfRUVF4S4TQJTyL+tliibykl0OnZ9PEyvCL+xhZPXq1brkkkv0/e9/XzNnztSCBQv00EMP6ZFHHlF1dXW/z1mxYoUaGhoCHxUVFeEuE0CU6llJwxSNHbiDLyIh6AbWYLW2tsrl6vsyTmfXUOtAc5But1tutzvcpQGIAT3bwBNG7MC28IiEoEdGmpubVVpaqtLSUklSeXm5SktLdfjwYUldoxpLly4NHL948WI999xz+vWvf60DBw5o+/bt+ta3vqXZs2eroKAgNGcBIC6xksZ+M3qNjNDEinAJemRk586duvzyywOfL1++XJK0bNkyrV27VtXV1YFgIkk333yzmpqa9N///d/67ne/q6ysLH32s59laS+AMzre3LOS5twcRkbsMDU3XS6HpYZTHapuaFNBVqrdJSEOBR1G5s2bN2g6Xrt27WmP3XXXXbrrrruCfSkACW5fr5U0KUmspLFDssuhcaNSdbCuVYdPtBJGEBbcmwZA1PL3izBFY6+i7DRJ0uET3KMG4UEYARC1/CtpaF611/juMFJBGEGYEEYARC3/3WIns/OqrcYzMoIwI4wAiFpV9V27fhbSp2ArwgjCjTACICoZY1RJGIkKRUzTIMwIIwCiUl1LuzydPlmWlJeZYnc5CW386K4wcry5XS2eTpurQTwijACISv4pmpx0t5Jd/FVlp4yUJGWlJUmSKk4yOoLQ4zccQFTyhxH2tYgOgb6ROsIIQo8wAiAqVda3SSKMRAv2GkE4EUYARCVW0kQX/8jIkZOnbK4E8YgwAiAqVZ4kjEQTlvcinAgjAKJSVQM9I9GEMIJwIowAiEo9Daws640GvbeE9/kGvlkqMByEEQBRp63Dq+PN7ZKYpokW+ZkpcjoseTp9OtbssbscxBnCCICoU93QtZImLdmpzNQkm6uBJLmcjsAoFVM1CDXCCICo07t51bIsm6uBH3uNIFwIIwCiDhueRSeaWBEuhBEAUaeSMBKVuGEewoUwAiDq9Gx4xkqaaMLICMKFMAIg6rDHSHQijCBcCCMAoo6/gZUwEl38YeRok0en2r02V4N4QhgBEFV8PqOq7qW97DESXTJTk5Se4pIkHTnJ6AhChzACIKrUtbSrvdMny5LyMukZiSaWZTFVg7AgjACIKv7m1dz0FCU5+Ssq2hBGEA78pgOIKtyTJroRRhAOhBEAUYU9RqIbe40gHAgjAKKKP4wUjiKMRCNGRhAOhBEAUaVnwzPCSDTqHUaMMTZXg3hBGAEQVarqu5b1FmQSRqJRQVaqHJbU1uHTsWaP3eUgThBGAEQVbpIX3ZJdDuV3B0X6RhAqhBEAUaOtw6u6lnZJTNNEM/pGEGqEEQBRw9+8OiLZqYxUl83VYCCBMFJ3yuZKEC8IIwCiRlWvlTSWZdlcDQYyfjQjIwgtwgiAqEG/SGxgrxGEGmEEQNSo9K+kIYxENXpGEGqEEQBRgz1GYkNR94Z0NY1tauvw2lwN4gFhBEDUqDzJfWliQfaIZI1IdkqSjpykiRVnjzACIGpUNfhHRtJsrgSDsSyLvhGEFGEEQFTw+YyqAz0jjIxEO/pGEEqEEQBR4XiLR+1enxyWlJtBGIl2hBGEEmEEQFTw35MmNyNFSU7+aop27DWCUOI3HkBU6GleZSVNLKBnBKFEGAEQFVjWG1t6T9MYY2yuBrGOMAIgKlSy+2pMKcxKlWVJre09NzcEhoswAiAq9IyM0LwaC1KSnMrrbjRmqgZnizACICr49xhhZCR2FLGiBiFCGAEQFWhgjT3jaWJFiBBGANiutb1TJ1s7JBFGYgl7jSBUCCMAbOffYyTd7VJmapLN1WCoCCMIFcIIANtVsZImJvXsNcLN8nB2CCMAbNcTRlhJE0v8IyNVDafU3umzuRrEMsIIANsxMhKbxoxMVmqSU8b07BMDDAdhBIDtjhBGYpJlWfSNICQIIwBs5x8ZGTeKMBJr2GsEoUAYAWA7/2oaRkZiT2BkpK7F5koQywgjAGzl8xlVs/tqzPKPZvkDJTAchBEAtjre7FGH18hhSbnpbrvLQZDyM7tWQPm38weGI+gwsm3bNi1evFgFBQWyLEsbNmw443M8Ho/+7d/+TRMmTJDb7dbEiRP1yCOPDKdeAHHG37yal5Eil5N/H8WavO4wUtPAyAiGzxXsE1paWlRcXKxbbrlF11133ZCec/3116u2tlYPP/ywzj33XFVXV8vnY006AJb1xjr/dTva5FGn10egxLAEHUYWLlyohQsXDvn4TZs2aevWrTpw4ICys7MlSRMnTgz2ZQHEKX8YKWQlTUwaM9Itp8OS12d0rNmj/EyuI4IX9gj7l7/8RRdddJHuv/9+FRYWaurUqfre976nU6cGnl/0eDxqbGzs8wEgPrGSJrY5HVag16eaqRoMU9AjI8E6cOCAXn/9daWkpGj9+vU6fvy4vvnNb6qurk6PPvpov89ZvXq1Vq1aFe7SAESBSqZpYl5+VqqqGtroG8GwhX1kxOfzybIsPfHEE5o9e7auueYa/eIXv9Bjjz024OjIihUr1NDQEPioqKgId5kAbFJ5snuahvvSxCx/EysjIxiusI+M5Ofnq7CwUJmZmYHHPvGJT8gYoyNHjmjKlCmnPcftdsvtZokfkAiq2GMk5uVndIcR7k+DYQr7yMgll1yiqqoqNTc3Bx778MMP5XA4NG7cuHC/PIAo1uLpVH1rhySpkDASs/K7r111IyMjGJ6gw0hzc7NKS0tVWloqSSovL1dpaakOHz4sqWuKZenSpYHjv/jFL2r06NH6yle+oj179mjbtm36/ve/r1tuuUWpqfzlAyQy/86r6W6X0lOSbK4Gw5XPXiM4S0GHkZ07d6qkpEQlJSWSpOXLl6ukpEQrV66UJFVXVweCiSSNHDlSmzdvVn19vS666CJ96Utf0uLFi/WrX/0qRKcAIFaxkiY+BHpGmKbBMAXdMzJv3jwZYwb8+tq1a0977Pzzz9fmzZuDfSkAcc7/L2n/mxliU0H33iK1TR55fUZOh2VzRYg1bJUHwDY9zauEkVg2Nr1n47PjzR67y0EMIowAsE1gZCSDaZpY5nRYyune+KyKqRoMA2EEgG38+1LkM00T87hhHs4GYQSAbfyraegZiX3+vhE2PsNwEEYA2Mb/xkXPSOwLjIyw1wiGgTACwBbNnk41tXVKkvK402vM80+10TOC4SCMALCFv7cg3e3SSHfY70yBMMvvDpT0jGA4CCMAbOHvF8lniiYucLM8nA3CCABbVAc2PGOKJh74p2lqG9vk9Q28MSbQH8IIAFv4h/P9d3xFbMtJd8thSZ0+ozo2PkOQCCMAbME0TXxxOR3KSWeqBsNDGAFgCzY8iz/0jWC4CCMAbFFDz0jcyQ+EEZb3IjiEEQC28O9HwchI/GB5L4aLMAIg4lo8nWrs3vCMMBI/8pmmwTARRgBEnH/L8JFul9JTkmyuBqGSxzQNhokwAiDievpFGBWJJ/57DDEygmARRgBEHP0i8cnfjFzb2CYfG58hCIQRABFXw7LeuJST7pZlSR1eo+MtbHyGoSOMAIi46kaW9cajJKdDOeluSayoQXAIIwAirrp7mqaAkZG44w+Y9I0gGIQRABFXTQNr3PLfa4iREQSDMAIg4vxLe/OZpok7/nsNVbG8F0EgjACIqFPtXtW3dkhiZCQe+ZuSGRlBMAgjACLKvyHWiGSnMlJcNleDUKNnBMNBGAEQUb03PLMsy+ZqEGrcLA/DQRgBEFHVDfSLxDN/GKlt8LDxGYaMMAIgovz/YmbDs/iUk54iy5LavT6daG23uxzECMIIgIiqZvfVuJbscmjMyK6Nz6rr6RvB0BBGAERUT88I0zTxqoC+EQSJMAIgoqr8IyNZjIzEK/+Sbf9+MsCZEEYARFQNPSNxL5/lvQgSYQRAxLR1eHWye8Oz/AymaeJVYHlvPdM0GBrCCICI8f9LOTXJqYxUNjyLV3mBnhFGRjA0hBEAERNY1pvFhmfxzD9NQ88IhoowAiBialjWmxDye42MGMPGZzgzwgiAiPEP2+fRLxLXcjO6wkh7p08nWtj4DGdGGAEQMf5pmgKW9ca1Phuf0TeCISCMAIiY3jfJQ3zLp4kVQSCMAIgYtoJPHP5rXMMurBgCwgiAiKFnJHEwMoJgEEYARERbhzfQzEjPSPzz33uohjCCISCMAIiI2u49J1KSHMpMTbK5GoSbP3BWMU2DISCMAIiIqnp/v0gqG54lgLwMf88IIyM4M8IIgIioaeQGeYmk983y2PgMZ0IYARAR1SzrTSi5mV37jHg6fYGbIwIDIYwAiIjqepb1JhK3y6kxI5Ml9Wx2BwyEMAIgInr2GGFZb6LIy6RvBENDGAEQEfSMJB7/fjLsNYIzIYwAiAi2gk88/uW9TNPgTAgjAMLO0+nV8eauDc+YpkkceezCiiEijAAIu9oGjyTJ7XJoVBobniWKfHpGMESEEQBh5x+mz89MYcOzBNJ7rxFgMIQRAGHHHiOJqedmeafY+AyDIowACDt/GCmgXySh5HZvCd/W4VM9G59hEIQRAGFX0z1Nw8hIYklJcmr0iK6Nz7hhHgYTdBjZtm2bFi9erIKCAlmWpQ0bNgz5udu3b5fL5dIFF1wQ7MsCiGFVDey+mqgKsrpGw/w3SgT6E3QYaWlpUXFxsdasWRPU8+rr67V06VJdccUVwb4kgBhXw+6rCaswEEYYGcHAXME+YeHChVq4cGHQL3T77bfri1/8opxOZ1CjKQBiHw2siauAMIIhiEjPyKOPPqoDBw7onnvuGdLxHo9HjY2NfT4AxKauDc+69hlhmibx+HdhrSSMYBBhDyP79u3Tj370I/3xj3+UyzW0gZjVq1crMzMz8FFUVBTmKgGEy9HGriCS7HIou7uZEYmDaRoMRVjDiNfr1Re/+EWtWrVKU6dOHfLzVqxYoYaGhsBHRUVFGKsEEE7VvZpX2fAs8finaRgZwWCC7hkJRlNTk3bu3Kldu3bpzjvvlCT5fD4ZY+RyufTyyy/rs5/97GnPc7vdcrvd4SwNQIT4d1/Ny2CKJhH5w8jRJo/aO31KdrGjBE4X1jCSkZGh3bt393nsoYce0quvvqpnn31WkyZNCufLA4gC1SzrTWhjRiYr2eVQe6dPtY1tKspOs7skRKGgw0hzc7P2798f+Ly8vFylpaXKzs7W+PHjtWLFClVWVurxxx+Xw+HQ9OnT+zw/JydHKSkppz0OID4FlvVmsaw3EVmWpcKsVJUfb1Fl/SnCCPoV9HjZzp07VVJSopKSEknS8uXLVVJSopUrV0qSqqurdfjw4dBWCSBm+RsXmaZJXP4VNTSxYiBBj4zMmzdv0BserV27dtDn33vvvbr33nuDfVkAMerIya43oHGjGBlJVP57ElWeJIygf3QSAQgbY4wqTrRKksYzPJ+wAhufcX8aDIAwAiBs6ls71OTplCSNG0UYSVSFo/zLe7k/DfpHGAEQNoe7R0Vy0t1KTXbaXA3swsZnOBPCCICwOcwUDdT3/jSD9RwicRFGAIQNYQRSzx4zre1eNZzqsLkaRCPCCICw8TevsrdEYktJcmrMyK77Eh1hRQ36QRgBEDaMjMCPvhEMhjACIGwCYWQ0YSTRFRBGMAjCCICw6PD6AvelYWQEPXuNsLwXpyOMAAiL6vo2eX1GbpdDY0dyF+5E5w8jlYyMoB+EEQBhcbhX86rDYdlcDexW2H1/GraER38IIwDCguZV9FaY1fVzQM8I+kMYARAWhBH05r9z79EmjzydXpurQbQhjAAIC/YYQW/ZI5LldnW95dQ2eGyuBtGGMAIgLBgZQW+WZQX2GqGJFR9HGAEQFoQRfBwrajAQwgiAkGto7Qjcg6QoO9XmahAt/H0jNLHi4wgjAEKu4mTXqMiYkW6lJbtsrgbRghU1GAhhBEDI9UzRMCqCHv6REaZp8HGEEQAhR78I+sPN8jAQwgiAkCOMoD89N8trkzHG5moQTQgjAEKOPUbQn7zMrmmaUx1enWztsLkaRBPCCICQY2QE/UlJcmpsetdNE5mqQW+EEQAh1en1BW6GNn40YQR9sdcI+kMYARBS1Q1t6vQZJTsdyk1PsbscRJlC9hpBPwgjAELK3y8yLjtVDodlczWINgWZrKjB6QgjAEKKfhEMhmka9IcwAiCkCCMYTOEofxhps7kSRBPCCICQ8oeRolGEEZyOjc/QH8IIgJCq6F5Jwx4j6I9/muZYk0eeTq/N1SBaEEYAhFQF0zQYxKi0JKUkdb311DQwVYMuhBEAIdPU1qETLe2SpCJukod+WJZFEytOQxgBEDIVJ7reXLJHJCs9JcnmahCt/H0j/s3xAMIIgJA5zD1pMASFvW6YB0iEEQAhRL8IhqKAFTX4GMIIgJDp2WOEfhEMLBBGGggj6EIYARAybHiGoSjovj8NDazwI4wACJkKekYwBL03PjPG2FwNogFhBEBIeH1GR7pXRzAygsHkZabIsqS2Dl9gKTgSG2EEQEjUNrap3euTy2EpP5OeEQzM7XJq7Ei3JFbUoAthBEBI+PtFxo1KldNh2VwNoh0bn6E3wgiAkGCPEQSDG+ahN8IIgJBgjxEEgxU16I0wAiAkWNaLYDAygt4IIwBCgjCCYLALK3ojjAAICfYYQTB6GlhZTQPCCIAQaPF06nhz134R40cTRnBm/mma480etXV4ba4GdiOMADhrFSe7RkWy0pKUkZJkczWIBVlpSUpNckqSahoYHUl0hBEAZ+1wHf0iCI5lWSocxV4j6EIYAXDW2GMEw8HGZ/AjjAA4a9yTBsNR2L3XCCtqQBgBcNZY1ovhKOi+h1HlScJIoiOMADhrhBEMx8QxIyRJHx1rtrkS2I0wAuCs+HyGreAxLFNyR0qS9tU2yxhjczWwE2EEwFk51uyRp9Mnp8NSfmaK3eUghkwaM0JOh6UmT6dqGz12lwMbEUYAnJUDx1okdW1i5XLyVwqGzu1yamL3Jnkf1jbZXA3sFPTfHNu2bdPixYtVUFAgy7K0YcOGQY9/7rnndOWVV2rs2LHKyMjQ3Llz9dJLLw23XgBR5r2qBknSJ/LTba4EsWhqbtfPDWEksQUdRlpaWlRcXKw1a9YM6fht27bpyiuv1Isvvqi33npLl19+uRYvXqxdu3YFXSyA6LO7siuMzCjMtLkSxKIp3WFkXy1NrInMFewTFi5cqIULFw75+P/8z//s8/lPf/pTbdy4UX/9619VUlIS7MsDiDL+MDKdMIJhmJLT3cR6lJGRRBZ0GDlbPp9PTU1Nys7OHvAYj8cjj6enmamxsTESpQEIUrOnU+XHu3pGGBnBcEztNTJijJFlWTZXBDtEvNvsgQceUHNzs66//voBj1m9erUyMzMDH0VFRRGsEMBQvVfZIGOkgswUjR7ptrscxKBJY0bI1b2ipqaRG+YlqoiGkSeffFKrVq3SunXrlJOTM+BxK1asUENDQ+CjoqIiglUCGCqmaHC2kl2OwOZnH9I3krAiFkaefvpp3XbbbVq3bp3mz58/6LFut1sZGRl9PgBEnzKaVxECgb4RVtQkrIiEkaeeekpf+cpX9NRTT2nRokWReEkAERAYGRlHGMHwsaIGQTewNjc3a//+/YHPy8vLVVpaquzsbI0fP14rVqxQZWWlHn/8cUldUzPLli3TL3/5S82ZM0c1NTWSpNTUVGVm8hcYEKuaPZ06QPMqQmBq97bwH7KiJmEFPTKyc+dOlZSUBJblLl++XCUlJVq5cqUkqbq6WocPHw4c/7vf/U6dnZ264447lJ+fH/j49re/HaJTAGCHPVWNMkbKz0zRGJpXcRb8K2r2c4+ahBX0yMi8efMG/WFZu3Ztn8+3bNkS7EsAiAH+KZppBYyK4OxMHN2zoqa6oU0FWal2l4QI40YSAIaF5lWESu8VNfuO0jeSiAgjAIYlsA38OFa74ez5+0ZYUZOYCCMAgtbi6dRHx7r+BcseIwiFKTncMC+REUYABG1PdVfzam6GWznpKXaXgzgwxb+ihuW9CYkwAiBou4/QL4LQCqyoOcqKmkREGAEQtDK2gUeI+VfUNHevqEFiIYwACFpZFSMjCK1kl0OTAveooW8k0RBGAASltb1T+7uXXxJGEEpT2RY+YRFGAATl/epG+YyUk+5WTgbNqwidc/03zGNb+IRDGAEQFJpXES7+kRFW1CQewgiAoOyubJRE8ypCz7/xGStqEg9hBEBQ2AYe4TJxTM+KmipW1CQUwgiAITvV7g3M5zMyglBLcvasqGFb+MRCGAEwZHu6m1fHjHQrN8NtdzmIQ6yoSUyEEQBD1jNFkyHLsmyuBvGoZ1t4RkYSCWEEwJDtpl8EYRZYUXOUkZFEQhgBMGRsA49wm9K918j+2iZW1CQQwgiAIWnr8Gqff+fVcYQRhMfEMSOU5LTU0u5lRU0CIYwAGJI91Y3y+ozGjExWHjuvIkx6r6ihbyRxEEYADEnvKRqaVxFOUwIraggjiYIwAmBI2AYekTI1h+W9iYYwAmBIdtO8iggJLO9lRU3CIIwAOKM+zauEEYRZ4B41rKhJGIQRAGf0QU2TvD6j0SOSlZ9J8yrCa8LonhU1lfWn7C4HEUAYAXBGu2leRQQlOR2aPKZrdGQfUzUJgTAC4IzKaF5FhJ3bPVXDiprEQBgBMCivz2jbvmOSpOKiLHuLQcLwr6j5kBU1CYEwAmBQbxyoU3VDmzJSXLp0yhi7y0GCmMrISEIhjAAY1J/fPiJJ+lxxgVKSnDZXg0QR2PjsaDMrahIAYQTAgFo8ndpUViNJ+vyscTZXg0QyYXSakpyWWtu9OlTXanc5CDPCCIABvfRejVrbvZo4Ok2zxmfZXQ4SSJLToVnjR0mS/v5+rc3VINwIIwAG9NzblZKk62aNY0kvIm7RzHxJ0gu7q22uBOFGGAHQr+qGU9r+0XFJ0v8uKbS5GiSiq6fnybKkXYfrdeQkUzXxjDACoF8bdlXJGGn2pGwVZafZXQ4SUE56imZPzJYk/W13jc3VIJwIIwBOY4zRc92raD4/i1ER2OdzTNUkBMIIgNOUVTZq39FmuV0OLZyRb3c5SGALuqdqSiuYqolnhBEAp/HvLXLVtDxlpCTZXA0SWU56iuZMYqom3hFGAPTR4fXpL+9USZKuY4oGUWBR9+jc80zVxC3CCIA+tu49phMt7Roz0q1Lz2X7d9hvwfQ8OSzpnYp6VZxgqiYeEUYA9OGfollyQYFcTv6KgP1y0lM02z9VU8boSDzibxoAAfWt7Xrl/aOSujY6A6LFopkFkqQX6BuJS4QRAAHPv1utdq9P5+el65MFGXaXAwRcPY2pmnhGGAEQ0LO3CKMiiC5j092aM2m0JKZq4hFhBIAkqfx4i94+XC+HJV17QYHd5QCnCdyr5l3CSLwhjACQJK3vHhW5dMpY5WSk2FwNcLqr/atqjjQwVRNnCCMA5PMZPbfLf4de9hZBdBoz0q1PT+6aqnmRPUfiCmEEgNbtrNCRk6c00u3SVZ/Ms7scYEDXdG+ARhiJL4QRIMH9fwdP6McbyyRJt182WanJTpsrAgbGVE18IowACezIyVbd/oe31OE1umZGnr4571y7SwIGxVRNfCKMAAmqxdOp2x7bqbqWdk0ryNAD/1osh8OyuyzgjAKraggjcYMwAiQgn8/oO38q1Qc1TRoz0q3/WXqR0pJddpcFDMmC7g3Q3mWqJm4QRoAE9ODfP9TLe2qV7HTotzddqIKsVLtLAoZszEi35p7TNVWzvnsVGGIbYQRIMBtLK/Vfr+6XJK2+boYunDDK5oqA4F1b3LUE/T///qGefeuIzdXgbBFGgATyTkW9fvDsu5Kkr//LZH3+QrZ9R2z6/IXjdP1F4+Qz0veeeUeP7zhod0k4C4QRIEHUNrbpa3/YKU+nT589P0c/uPp8u0sChs3psHTfdTN188UTJUkrN76nNa/tt7coDBsda0Ccq6o/pcf+cVBPvnlYTW2dmpIzUr+88QI5WTmDGOdwWLpn8SeVkeLSr17dr5+/tFfNnk79YMF5six+vmNJ0CMj27Zt0+LFi1VQUCDLsrRhw4YzPmfLli2aNWuW3G63zj33XK1du3YYpQIIRmlFve56apcuvf81/XbbATW1deqcsSP0+2UXKT0lye7ygJCwLEvLrzpPKxZ2jfT9estHWrnxPfl8xubKEIygR0ZaWlpUXFysW265Rdddd90Zjy8vL9eiRYt0++2364knntArr7yi2267Tfn5+VqwYMGwigbQP6/PaPOeGv3+/y3XzkMnA49/enK2bvvMZH32/Bz2EkFc+vpl52hkikv/vqFMf3jjkFo8nbr//8yUy0k3QiywjDHDjo+WZWn9+vVasmTJgMf88Ic/1AsvvKCysrLAYzfeeKPq6+u1adOmIb1OY2OjMjMz1dDQoIyMjOGWC8SNxrYOHa5r1eETrTrU/WfFiVZ9WNuko00eSVKS09LimQW65TOTNL0w0+aKgcjYWFqp5evekddndMm5o3XZ1LGaOHqEJo4ZofHZaUpJ4nYHkTTU9++w94zs2LFD8+fP7/PYggULdPfddw/4HI/HI4/HE/i8sbExLLX9+a0jKqtqCMv3RvwLJsZ/PPMbST5j5DNd38cYE/jcZ4zaO33ydPrU1uGVp9MnT4dXbR0+eTq9qj/VofrWjgFfKystSV+aM15L505UbkbKMM8OiE3XXlCo1CSn7nxyl7bvr9P2/XWBr1mWlJ+RogmjR2jiGILJx31+1jjb/uES9jBSU1Oj3NzcPo/l5uaqsbFRp06dUmrq6ZstrV69WqtWrQp3adr64TH95Z2qsL8OEA5jRiZrfHZa4KMoO00TRo/QjMJMbnaHhHbVtDw9982LtamsRgfrWnSorlUHj7eoydOpqoY2VTW0aceBujN/owRTMn5U/IaR4VixYoWWL18e+LyxsVFFRUUhf50rP5mromx2nkR4WOrpzfA39vfu1nA4LFmy5LAU6ONwWF2fJ7sccrucSklyKCXJKber58+RKS4VjUrTCHdU/voCUWF6YWafN1ZjjE62dqj8eIsO1bXo8IlWdXh9NlYYfabkjLTttcP+t1leXp5qa2v7PFZbW6uMjIx+R0Ukye12y+12h7s0LS4u0OLigrC/DgDAXpZlKXtEsrJHJLPrcBQKe5vx3Llz9corr/R5bPPmzZo7d264XxoAAMSAoMNIc3OzSktLVVpaKqlr6W5paakOHz4sqWuKZenSpYHjb7/9dh04cEA/+MEP9MEHH+ihhx7SunXr9J3vfCc0ZwAAAGJa0GFk586dKikpUUlJiSRp+fLlKikp0cqVKyVJ1dXVgWAiSZMmTdILL7ygzZs3q7i4WP/xH/+h3//+9+wxAgAAJJ3lPiORwj4jAADEnqG+f7M1HQAAsBVhBAAA2IowAgAAbEUYAQAAtiKMAAAAWxFGAACArQgjAADAVoQRAABgK8IIAACwVUzcg9y/SWxjY6PNlQAAgKHyv2+fabP3mAgjTU1NkqSioiKbKwEAAMFqampSZmbmgF+PiXvT+Hw+VVVVKT09XZZlhez7NjY2qqioSBUVFXF7z5t4P0fOL/bF+znG+/lJ8X+OnN/wGWPU1NSkgoICORwDd4bExMiIw+HQuHHjwvb9MzIy4vIHrLd4P0fOL/bF+znG+/lJ8X+OnN/wDDYi4kcDKwAAsBVhBAAA2Cqhw4jb7dY999wjt9ttdylhE+/nyPnFvng/x3g/Pyn+z5HzC7+YaGAFAADxK6FHRgAAgP0IIwAAwFaEEQAAYCvCCAAAsFXchZE1a9Zo4sSJSklJ0Zw5c/Tmm28Oevwzzzyj888/XykpKZoxY4ZefPHFPl83xmjlypXKz89Xamqq5s+fr3379oXzFAYVzPn9z//8jy699FKNGjVKo0aN0vz58087/uabb5ZlWX0+rr766nCfxqCCOce1a9eeVn9KSkqfY2L5Gs6bN++087MsS4sWLQocE03XcNu2bVq8eLEKCgpkWZY2bNhwxuds2bJFs2bNktvt1rnnnqu1a9eedkywv9fhEuz5Pffcc7ryyis1duxYZWRkaO7cuXrppZf6HHPvvfeedv3OP//8MJ7F4II9xy1btvT7M1pTU9PnuFi9hv39flmWpWnTpgWOiaZruHr1an3qU59Senq6cnJytGTJEu3du/eMz7P7vTCuwsif/vQnLV++XPfcc4/efvttFRcXa8GCBTp69Gi/x//jH//QF77wBd16663atWuXlixZoiVLlqisrCxwzP33369f/epX+s1vfqN//vOfGjFihBYsWKC2trZInVZAsOe3ZcsWfeELX9Brr72mHTt2qKioSFdddZUqKyv7HHf11Veruro68PHUU09F4nT6Few5Sl27Bvau/9ChQ32+HsvX8LnnnutzbmVlZXI6nfrXf/3XPsdFyzVsaWlRcXGx1qxZM6Tjy8vLtWjRIl1++eUqLS3V3Xffrdtuu63PG/ZwfibCJdjz27Ztm6688kq9+OKLeuutt3T55Zdr8eLF2rVrV5/jpk2b1uf6vf766+Eof0iCPUe/vXv39jmHnJycwNdi+Rr+8pe/7HNeFRUVys7OPu13MFqu4datW3XHHXfojTfe0ObNm9XR0aGrrrpKLS0tAz4nKt4LTRyZPXu2ueOOOwKfe71eU1BQYFavXt3v8ddff71ZtGhRn8fmzJljvv71rxtjjPH5fCYvL8/8/Oc/D3y9vr7euN1u89RTT4XhDAYX7Pl9XGdnp0lPTzePPfZY4LFly5aZa6+9NtSlDluw5/joo4+azMzMAb9fvF3DBx980KSnp5vm5ubAY9F2Df0kmfXr1w96zA9+8AMzbdq0Po/dcMMNZsGCBYHPz/b/WbgM5fz688lPftKsWrUq8Pk999xjiouLQ1dYCA3lHF977TUjyZw8eXLAY+LpGq5fv95YlmUOHjwYeCyar+HRo0eNJLN169YBj4mG98K4GRlpb2/XW2+9pfnz5wceczgcmj9/vnbs2NHvc3bs2NHneElasGBB4Pjy8nLV1NT0OSYzM1Nz5swZ8HuGy3DO7+NaW1vV0dGh7OzsPo9v2bJFOTk5Ou+88/SNb3xDdXV1Ia19qIZ7js3NzZowYYKKiop07bXX6r333gt8Ld6u4cMPP6wbb7xRI0aM6PN4tFzDYJ3pdzAU/8+iic/nU1NT02m/g/v27VNBQYEmT56sL33pSzp8+LBNFQ7fBRdcoPz8fF155ZXavn174PF4u4YPP/yw5s+frwkTJvR5PFqvYUNDgySd9jPXWzS8F8ZNGDl+/Li8Xq9yc3P7PJ6bm3va3KVfTU3NoMf7/wzme4bLcM7v4374wx+qoKCgzw/U1Vdfrccff1yvvPKKfvazn2nr1q1auHChvF5vSOsfiuGc43nnnadHHnlEGzdu1B//+Ef5fD5dfPHFOnLkiKT4uoZvvvmmysrKdNttt/V5PJquYbAG+h1sbGzUqVOnQvJzH00eeOABNTc36/rrrw88NmfOHK1du1abNm3Sr3/9a5WXl+vSSy9VU1OTjZUOXX5+vn7zm9/oz3/+s/785z+rqKhI8+bN09tvvy0pNH93RYuqqir97W9/O+13MFqvoc/n0913361LLrlE06dPH/C4aHgvjIm79uLs3XfffXr66ae1ZcuWPg2eN954Y+C/Z8yYoZkzZ+qcc87Rli1bdMUVV9hRalDmzp2ruXPnBj6/+OKL9YlPfEK//e1v9ZOf/MTGykLv4Ycf1owZMzR79uw+j8f6NUwUTz75pFatWqWNGzf26adYuHBh4L9nzpypOXPmaMKECVq3bp1uvfVWO0oNynnnnafzzjsv8PnFF1+sjz76SA8++KD+8Ic/2FhZ6D322GPKysrSkiVL+jwerdfwjjvuUFlZma09SEMVNyMjY8aMkdPpVG1tbZ/Ha2trlZeX1+9z8vLyBj3e/2cw3zNchnN+fg888IDuu+8+vfzyy5o5c+agx06ePFljxozR/v37z7rmYJ3NOfolJSWppKQkUH+8XMOWlhY9/fTTQ/qLzc5rGKyBfgczMjKUmpoakp+JaPD000/rtttu07p1604bDv+4rKwsTZ06NSau30Bmz54dqD9erqExRo888ohuuukmJScnD3psNFzDO++8U88//7xee+01jRs3btBjo+G9MG7CSHJysi688EK98sorgcd8Pp9eeeWVPv9y7m3u3Ll9jpekzZs3B46fNGmS8vLy+hzT2Niof/7znwN+z3AZzvlJXR3QP/nJT7Rp0yZddNFFZ3ydI0eOqK6uTvn5+SGpOxjDPcfevF6vdu/eHag/Hq6h1LXszuPx6Mtf/vIZX8fOaxisM/0OhuJnwm5PPfWUvvKVr+ipp57qsyR7IM3Nzfroo49i4voNpLS0NFB/PFxDqWuVyv79+4f0DwI7r6ExRnfeeafWr1+vV199VZMmTTrjc6LivTAkbbBR4umnnzZut9usXbvW7Nmzx3zta18zWVlZpqamxhhjzE033WR+9KMfBY7fvn27cblc5oEHHjDvv/++ueeee0xSUpLZvXt34Jj77rvPZGVlmY0bN5p3333XXHvttWbSpEnm1KlTUX9+9913n0lOTjbPPvusqa6uDnw0NTUZY4xpamoy3/ve98yOHTtMeXm5+fvf/25mzZplpkyZYtra2iJ+fsM5x1WrVpmXXnrJfPTRR+att94yN954o0lJSTHvvfde4JhYvoZ+n/nMZ8wNN9xw2uPRdg2bmprMrl27zK5du4wk84tf/MLs2rXLHDp0yBhjzI9+9CNz0003BY4/cOCASUtLM9///vfN+++/b9asWWOcTqfZtGlT4Jgz/T+L5vN74oknjMvlMmvWrOnzO1hfXx845rvf/a7ZsmWLKS8vN9u3bzfz5883Y8aMMUePHo34+RkT/Dk++OCDZsOGDWbfvn1m9+7d5tvf/rZxOBzm73//e+CYWL6Gfl/+8pfNnDlz+v2e0XQNv/GNb5jMzEyzZcuWPj9zra2tgWOi8b0wrsKIMcb813/9lxk/frxJTk42s2fPNm+88Ubga5dddplZtmxZn+PXrVtnpk6dapKTk820adPMCy+80OfrPp/P/PjHPza5ubnG7XabK664wuzduzcSp9KvYM5vwoQJRtJpH/fcc48xxpjW1lZz1VVXmbFjx5qkpCQzYcIE89WvftWWvyB6C+Yc77777sCxubm55pprrjFvv/12n+8Xy9fQGGM++OADI8m8/PLLp32vaLuG/mWeH//wn9OyZcvMZZdddtpzLrjgApOcnGwmT55sHn300dO+72D/zyIp2PO77LLLBj3emK6lzPn5+SY5OdkUFhaaG264wezfvz+yJ9ZLsOf4s5/9zJxzzjkmJSXFZGdnm3nz5plXX331tO8bq9fQmK5lrKmpqeZ3v/tdv98zmq5hf+cmqc/vVTS+F1rdxQMAANgibnpGAABAbCKMAAAAWxFGAACArQgjAADAVoQRAABgK8IIAACwFWEEAADYijACAABsRRgBAAC2IowAAABbEUYAAICtCCMAAMBW/z9MoUPQk3FrLgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(61)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, there is still numerical diffusion present, but it is less severe.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nM/ENwUL+bYoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f51886236d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(71)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here the same pattern is present -- the wave is more square than in the previous runs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f518858d5f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(85)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This doesn't look anything like our original hat function. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What happened?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To answer that question, we have to think a little bit about what we're actually implementing in code.  \n",
    "\n",
    "In each iteration of our time loop, we use the existing data about our wave to estimate the speed of the wave in the subsequent time step.  Initially, the increase in the number of grid points returned more accurate answers.  There was less numerical diffusion and the square wave looked much more like a square wave than it did in our first example.  \n",
    "\n",
    "Each iteration of our time loop covers a time-step of length $\\Delta t$, which we have been defining as 0.025\n",
    "\n",
    "During this iteration, we evaluate the speed of the wave at each of the $x$ points we've created.  In the last plot, something has clearly gone wrong.  \n",
    "\n",
    "What has happened is that over the time period $\\Delta t$, the wave is travelling a distance which is greater than `dx`.  The length `dx` of each grid box is related to the number of total points `nx`, so stability can be enforced if the $\\Delta t$ step size is calculated with respect to the size of `dx`.  \n",
    "\n",
    "$$\\sigma = \\frac{u \\Delta t}{\\Delta x} \\leq \\sigma_{\\max}$$\n",
    "\n",
    "where $u$ is the speed of the wave; $\\sigma$ is called the **Courant number** and the value of $\\sigma_{\\max}$ that will ensure stability depends on the discretization used. \n",
    "\n",
    "In a new version of our code, we'll use the CFL number to calculate the appropriate time-step `dt` depending on the size of `dx`.  \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "from matplotlib import pyplot\n",
    "\n",
    "def linearconv(nx):\n",
    "    dx = 2 / (nx - 1)\n",
    "    nt = 20    #nt is the number of timesteps we want to calculate\n",
    "    c = 1\n",
    "    sigma = .5\n",
    "    \n",
    "    dt = sigma * dx\n",
    "\n",
    "    u = numpy.ones(nx) \n",
    "    u[int(.5/dx):int(1 / dx + 1)] = 2\n",
    "\n",
    "    un = numpy.ones(nx)\n",
    "\n",
    "    for n in range(nt):  #iterate through time\n",
    "        un = u.copy() ##copy the existing values of u into un\n",
    "        for i in range(1, nx):\n",
    "            u[i] = un[i] - c * dt / dx * (un[i] - un[i-1])\n",
    "        \n",
    "    pyplot.plot(numpy.linspace(0, 2, nx), u)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f518853b358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(41)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f51884ca668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(61)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f51884b8f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(81)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ne6uk0yTNN7MjAn02AKBC5u4DDzA7W9Jcd/9k8fW/SXJ3//ceYx6VdIe7Lym+/l9JN7j7870+a+Av\nBgDok7tbJX8vzcHRP0g60cwmSnpD0j9JuqrXmNclfUzSEjNrkdQu6bVQRQIAKlMy5N29y8y+JOm3\nSto797r7SjO7Lnnb75E0T9J/m9mK4l/7uru/lVnVAIBUSrZrAACNK5MzXkudPFUcc5eZrSmeQDUt\nizryIsXJaDPMbIeZvVh83ByjzkZgZvea2ZYev3X2NYZ9M4VS25L9sjxmNsHMnjSzV4onlX6ln3Hl\n7Z/uHvSh5AfHWkkTJQ2VtFzSyb3GXCzpseLzsyT9PnQdeXmk3J4zJC2IXWsjPCSdL2mapBX9vM++\nGW5bsl+Wtz3HSppWfH6EpFUhsjOLmXyak6culfSAJLn7UkkjiwdscbA021OSOKidgrsvlrR9gCHs\nmyml2JYS+2Vq7r7Z3ZcXn++UtFIHn5NU9v6ZRcinOXmq95iNfYxBIs32lKRzir++PWZmH6lNabnE\nvhkW+2UFzOw4Jb8lLe31Vtn7J9eXyYcXJB3r7rvN7GJJv1SyjBWIif2yAsUTSR+S9NXijL4qWczk\nN0o6tsfrCcU/6z2mrcQYJEpuT3ff6e67i89/I2momR1VuxJzhX0zEPbL8hUv7PiQpJ+6+6/6GFL2\n/plFyB84ecrMhik5eWpBrzELJH1WOnBG7Q5335JBLXlQcnv27MmZ2ZlKlsZynkL/TP33itk3y9Pv\ntmS/rMh9kv7o7j/s5/2y98/g7RpPcfKUu//azGaZ2VpJuyRdG7qOvEizPSVdYWb/ImmvpHclXRmv\n4vpmZg9KKkg62szWS7pV0jCxb5at1LYU+2VZzOw8SXMkvWxmy5Rc3fdGJSvrKt4/ORkKAHKM2/8B\nQI4R8gCQY4Q8AOQYIQ8AOUbIA0COEfIAkGOEPADkGCEPADn2/z8oDw7jjrmqAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f51883c8438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(101)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEACAYAAABWLgY0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFshJREFUeJzt3X+w1XWdx/HXGy5XRIQQ+Slwr8vqWAZCUoo1dawc0mjc\n2dnNVcPUanOzzZlqcnN2A2ecabfphzXZDwytnBhzbGbFssmZzTOTZQauBIKU2AKGcEF+ZMDFuPDe\nP74HunDPPed7zvl+v5/v+Z7nY+bM3Mv5cu7b4+HJl8/5fr/H3F0AgGIaEXoAAEB6iDwAFBiRB4AC\nI/IAUGBEHgAKjMgDQIHVjbyZzTCzn5vZBjNbb2afGGa7r5nZC2a21szmJT8qAKBRXTG2GZD0SXdf\na2ZjJT1jZo+7+6bjG5jZlZJmu/t5ZnaJpG9JujSdkQEAcdXdk3f3ne6+tvL1AUnPSzrnlM2ulvT9\nyjZPSxpvZlMSnhUA0KCG1uTNrFfSPElPn3LXOZJeGvT9dg39iwAAkLHYka8s1Tws6bbKHj0AIOfi\nrMnLzLoUBf4Bd3+kyibbJc0c9P2Myq+d+jhcKAcAmuDu1szvi7snf5+kje7+1WHuXyXpBkkys0sl\n7Xf3vmobuju3hG5Lly4NPsNwtwMHXO98p+sDH3AdOhR+njSez6NHXStWuKZNcz33XPj583TL82uz\nHW+tqLsnb2ZvlXS9pPVm9qwkl3SHpJ6o2b7c3R8zs6vMbLOkg5JuamkqtLUDB6TFi6XeXmnFCmnk\nyNATpWPECOnmm6XTTpPe/W7p8celOXNCTwWcrG7k3f2Xkur+MXX3jycyEdrepz8tzZol3XdfFMKi\nu/766L9z8WLpxRelrliLoEA2OuCPYHGVSqXQIwzxpz9JP/yh9IUvtF/gW3k+r71Wmj5deuyx5OZp\nZ3l8bXYqa3W9p6EfZuZZ/jxk7xvfkMpl6aGHQk+Sve99L/oLjtAjaWYmb/KNVyKPxLhLF10kfeUr\n0rveFXqa7PX3SzNnSqtXS+eeG3oaFEkrkW+zf1Ajz556Sjp8WLr88tCThHH66dKSJdK994aeBPgr\n9uSRmBtuiPbkP/Wp0JOEs2mTVCpJ27ZJ3d2hp0FRsCeP4PbulVatkj74wdCThHXBBdLrXy89Uu2U\nQSAAIo9ErFolXXGFdPbZoScJ78YbpQcfDD0FECHySMTq1dJll4WeIh8uu0xasyb0FECEyCMRa9ZI\nCxaEniIfZs+OzhfYtSv0JACRRwKOHJGee06aPz/0JPkwYoR08cXSM8+EngQg8kjAhg3RdWrGjg09\nSX4sWEDkkQ9EHi1jqWaoBQtYl0c+EHm0jMgPReSRF0QeLSPyQ/X2Rpc52LEj9CTodEQeLXntNWnj\nxuhMV/yVGevyyAcij5asXy+dd540ZkzoSfKHJRvkAZFHS1iqGR6RRx4QebRkzZromHAMdfHF0fPD\nNfkQEpFHS9iTH97MmdKxY9L27aEnQScj8mhaf7/0+99Lc+eGniSfjr/5unp16EnQyYg8mvbCC9Gh\ngqNHh54kv+bMkZ5/PvQU6GREHk3bsoWPuauntzd6noBQiDyatmVLFDEMj8gjNCKPphH5+og8QiPy\naNrWrUS+np4e6aWXoqNsgBCIPJrGnnx9Y8ZI48ZJfX2hJ0GnIvJoGpGPhyUbhETk0ZRXX5UOH+aD\nu+Mg8gipbuTNbIWZ9ZnZumHuH2dmq8xsrZmtN7MbE58SuXN8Pd4s9CT5R+QRUpw9+fslLapx/62S\nNrj7PEmXS/qSmXUlMRzyi6Wa+Ig8QqobeXd/UtK+WptIOrPy9ZmS9rj7QAKzIceIfHxEHiElscf9\ndUmrzOxlSWMlXZPAYyLniHx8RB4hJfHG6yJJz7r7dEnzJd1jZmMTeFzkGJGPr6dH2raNY+URRhJ7\n8jdJ+rwkufuLZvZ/ki6QVPXjEpYtW3bi61KppFKplMAIyBqRj2/wsfLTpoWeBu2gXC6rXC4n8ljm\nMT7RwMx6JT3q7nOq3HePpF3ufqeZTVEU94vcfW+VbT3Oz0P+TZwobdokTZoUepL2cMkl0t13SwsX\nhp4E7cjM5O5NHctWd0/ezFZKKkmaaGbbJC2V1C3J3X25pLskfXfQIZafqRZ4FAfHyDfu+Lo8kUfW\n6kbe3a+rc/8O1T7EEgXDMfKN481XhMIZr2gY6/GNI/IIhcijYUS+cUQeoRB5NIzIN47IIxQij4YR\n+cZxrDxCIfJoGJFvHNeVRyhEHg3bulWaNSv0FO2npyd67oAsEXk05C9/iY6T5ySoxk2bJu3cGXoK\ndBoij4bs2hUFfgSvnIZNnUrkkT3+qKIhO3dGsULjiDxCIPJoCJFvHpFHCEQeDSHyzZs6laNrkD0i\nj4YQ+eaxJ48QiDwaQuSbR+QRApFHQ4h886ZMiZ4/PlIBWSLyaAiRb96YMVJ3d3SeAZAVIo+GEPnW\nsGSDrBF5NITIt4bII2tEHrEdOBCtJ48dG3qS9kXkkTUij9iO78XzsX/NI/LIGpFHbCzVtI7II2tE\nHrER+dYReWSNyCM2It86Io+sEXnERuRbR+SRNSKP2Ih864g8skbkERuRb92kSdKePdLRo6EnQacg\n8oiNyLeuq0uaMEF65ZXQk6BTEHnERuSTwZINskTkEcuxY9Hnu06eHHqS9nf8apRAFog8Ytm7N7qc\nwWmnhZ6k/bEnjyzVjbyZrTCzPjNbV2Obkpk9a2bPmdkTyY6IPGCpJjlEHlmKsyd/v6RFw91pZuMl\n3SNpsbu/UdI/JjQbcoTIJ4fII0t1I+/uT0raV2OT6yT9yN23V7bnuIEC6usj8kkh8shSEmvy50s6\ny8yeMLPVZrYkgcdEzrAnnxwijyx1JfQYb5L0TklnSHrKzJ5y983VNl62bNmJr0ulkkqlUgIjIG1E\nPjlEHvWUy2WVy+VEHss8xqcKm1mPpEfdfW6V+26XNNrd76x8/x1JP3X3H1XZ1uP8POTPkiXSFVdI\nN9wQepL2t3evNHu2tK/WIigwiJnJ3Zv6JIe4yzVWuVXziKS3mdlIMxsj6RJJzzczDPJr587o+G60\nbsIE6dAh6bXXQk+CTlB3ucbMVkoqSZpoZtskLZXULcndfbm7bzKzn0laJ+mopOXuvjHFmREAJ0Il\nx0w6+2xp925pxozQ06Do6kbe3a+Lsc0XJX0xkYmQS7t3E/kkTZ5M5JENznhFXceORUGaNCn0JMUx\neXL0ryMgbUQede3fH13SoLs79CTFQeSRFSKPuliPTx6RR1aIPOratYulmqRNmkTkkQ0ij7p40zV5\n7MkjK0QedbFck7zjR9cAaSPyqIvIJ489eWSFyKMuIp88Io+sEHnUxTHyyTv+xiuXckLaiDzqYk8+\neWecEV3e4ODB0JOg6Ig86iLy6eDNV2SByKMuIp8O1uWRBSKPmgYGossanHVW6EmKhxOikAUij5r2\n7IkCP3Jk6EmKhz15ZIHIoyaWatJD5JEFIo+aiHx6iDyyQORRE5FPD0fXIAtEHjVxBcr08MYrskDk\nURNXoEwPyzXIApFHTSzXpIfIIwtEHjUR+fRMmiS98grXr0G6iDxqIvLp6e6OrmGzf3/oSVBkRB41\ncQXKdPHmK9JG5FETe/LpYl0eaSPyGNbhw1J/vzR+fOhJiovII21EHsM6fvikWehJiovII21EHsPi\nRKj0sSaPtBF5DIsTodLHpQ2QtrqRN7MVZtZnZuvqbPdmMztiZn+f3HgIiTdd08dyDdIWZ0/+fkmL\nam1gZiMk/aeknyUxFPKByKdv8mSpry/0FCiyupF39ycl7auz2b9KelgS+yQF0tdH5NM2ZQp78khX\ny2vyZjZd0t+5+zclcRxGgezcKU2bFnqKYps6NXqegbR0JfAYd0u6fdD3NUO/bNmyE1+XSiWVSqUE\nRkAadu6MIoT0TJggHToUnZMwenToaZAX5XJZ5XI5kccyj3F1JDPrkfSou8+tct8fjn8p6WxJByX9\ns7uvqrKtx/l5yIc5c6Qf/ECaO+T/OpI0a5b0i19IPT2hJ0FemZncvamVkrh78qZh9tDd/W8GDXK/\nor8MhgQe7Yc9+WwcX7Ih8khD3cib2UpJJUkTzWybpKWSuiW5uy8/ZXN20wviyJHo6ogTJ4aepPhY\nl0ea6kbe3a+L+2DufnNr4yAvdu2Szj5bGjky9CTFN2UKkUd6OOMVVbFUkx325JEmIo+qiHx2iDzS\nRORRFZHPDpFHmog8qiLy2SHySBORR1VEPjtEHmki8qiKyGfn+NE1nCeINBB5VEXkszN2rNTVJb36\nauhJUEREHlUR+WyxZIO0EHlU1ddH5LM0dSrXlUc6iDyGOHgwuqzBuHGhJ+kc7MkjLUQeQxzfizc+\nHSAzRB5pIfIYgvX47BF5pIXIYwginz0ij7QQeQxB5LNH5JEWIo8hiHz2iDzSQuQxBJHPHpFHWog8\nhiDy2Zs8Wdq9Wzp6NPQkKBoijyGIfPZGjZJe9zppz57Qk6BoiDyGIPJhsGSDNBB5nMQ9OhlqypTQ\nk3QeIo80EHmcZN8+acwYafTo0JN0HiKPNBB5nISlmnCIPNJA5HGSHTtYqgll6tTo+QeSRORxkpde\nkmbNCj1FZ5o5M3r+gSQReZxkyxaptzf0FJ2ptzd6/oEkEXmchMiHQ+SRBiKPkxD5cCZNkg4dkv78\n59CToEiIPE5C5MMxi577rVtDT4IiqRt5M1thZn1mtm6Y+68zs99Wbk+a2Zzkx0QWBgaioztmzAg9\nSediyQZJi7Mnf7+kRTXu/4Okt7v7RZLuknRvEoMhe3/8Y3T4ZHd36Ek6F5FH0rrqbeDuT5pZT437\nfz3o219LOieJwZA9lmrCI/JIWtJr8h+W9NOEHxMZIfLh9fQQeSSr7p58XGZ2uaSbJL2t1nbLli07\n8XWpVFKpVEpqBLSIyIfHnjwkqVwuq1wuJ/JY5u71N4qWax5197nD3D9X0o8kvcfdX6zxOB7n5yGM\nG2+U3v526eabQ0/Sufr6pAsvlF55JfQkyBMzk7tbM7837nKNVW7VfvgsRYFfUivwyD/25MObPJlj\n5ZGsuss1ZrZSUknSRDPbJmmppG5J7u7LJf2HpLMkfcPMTNIRd39LeiMjLUQ+PLNoXX7rVumNbww9\nDYog1nJNYj+M5ZrcGhiQzjgj2oPkEMqwrrxSuvVWafHi0JMgL7JYrkHBcYx8fvDmK5JE5CEpWh5g\nqSYfuLQBkkTkIYn1+DxhTx5JIvKQROTzhMgjSUQekoh8nhB5JInIQxKRz5PJk6WDB6UDB0JPgiIg\n8pBE5PNk8LHyQKuIPDQwIL38MteRzxOWbJAUIg9t3izNnMkx8nly/vnSxo2hp0AREHlozRppwYLQ\nU2CwBQukZ54JPQWKgMiDyOfQggXR/xegVUQeWrNGuvji0FNgsPPPl3btkvbtCz0J2h2R73ADA9La\ntdKb3hR6Egw2cqQ0fz5LNmgdke9wmzZJ55wjjR8fehKciiUbJIHIdzjW4/OLyCMJRL7DEfn8IvJI\nApHvcEQ+v2bPlvbvl3bvDj0J2hmR72BHjkjr10dv8CF/RoyIjnrizVe0gsh3sA0botPnx44NPQmG\nw5INWkXkOxhLNflH5NEqIt/BiHz+EXm0ish3sN/8hjNd8663V+rvj64SCjSDyHeoTZukHTukN785\n9CSoxUxavFhauTL0JGhXRL5Dffvb0oc+JI0aFXoS1HPLLdLy5dKxY6EnQTsi8h2ov1964AHpIx8J\nPQniuPRS6fTTpSeeCD0J2hGR70APPSRdckn0EXPIP7Nob/5b3wo9CdqRuXt2P8zMs/x5qG7hQumO\nO6T3vS/0JIjr1Vejv5Q3bpSmTQs9DbJmZnJ3a+b3siffYdaulbZvl666KvQkaMS4cdL73y/dd1/o\nSdBu6kbezFaYWZ+ZrauxzdfM7AUzW2tm85IdEUk5dky66y7pwx+OrleO9nLLLdI3vxl9mAgQV5w9\n+fslLRruTjO7UtJsdz9P0kclsXKYQ0ePRnHfvVv65CdDT4NmzJ8fHRF1+eVSX1/oadAu6kbe3Z+U\nVOtDyK6W9P3Ktk9LGm9mU5IZD0k4elS6+WZpyxbpsce4Vk07u/NO6ZprpFIpOs8BqKcrgcc4R9JL\ng77fXvk19jUCOXIk+mzQ3/1OeuSR6HbuudKPfyyNGRN6OrTqc5+Lzm+48ELpve+Vrr46Osxy4sTo\nUEtgsCQi35Dp07P+icU0+CAl92hv/ejRKPD9/dKECdKsWVEEHnww+gxXa+q9eeTRZz8rLVkirVol\n3XuvdNtt0p490f/j0aOlrq7ofZfB/8/5/9+Zkoj8dkkzB30/o/JrVV177bITXy9cWNJll5USGKEz\nDf5DO3JkdBs1KlqOGcFxU4U3Y4b0sY9FNyn6y76/Xzp8OPoLf2Dgr9ty5HJ7+dWvynrqqfKJ77/8\n5eYfK9Zx8mbWK+lRd59T5b6rJN3q7u81s0sl3e3ulw7zOBwnDwANauU4+bp78ma2UlJJ0kQz2yZp\nqaRuSe7uy939MTO7ysw2Szoo6aZmBgEAJI8zXgEg5zjjFQBQFZEHgAIj8gBQYEQeAAqMyANAgRF5\nACgwIg8ABUbkAaDAiDwAFBiRB4ACI/IAUGBEHgAKjMgDQIEReQAoMCIPAAVG5AGgwIg8ABQYkQeA\nAiPyAFBgRB4ACozIA0CBEXkAKDAiDwAFRuQBoMCIPAAUGJEHgAIj8gBQYEQeAAosVuTN7D1mtsnM\nfm9mt1e5f5yZrTKztWa23sxuTHxSAEDD6kbezEZI+rqkRZIulHStmV1wyma3Strg7vMkXS7pS2bW\nlfSwOFm5XA49QqHwfCaH5zI/4uzJv0XSC+6+1d2PSHpQ0tWnbOOSzqx8faakPe4+kNyYqIY/SMni\n+UwOz2V+xIn8OZJeGvT9Hyu/NtjXJb3BzF6W9FtJtyUzHgCgFUm98bpI0rPuPl3SfEn3mNnYhB4b\nANAkc/faG5hdKmmZu7+n8v2/SXJ3/69B2/xY0ufd/ZeV7/9H0u3uvuaUx6r9wwAAVbm7NfP74rw5\nulrS35pZj6Qdkv5J0rWnbLNV0rsl/dLMpkg6X9IfkhoSANCcupF396Nm9nFJjyta3lnh7s+b2Uej\nu325pLskfdfM1lV+22fcfW9qUwMAYqm7XAMAaF+pnPFa7+SpyjZfM7MXKidQzUtjjqKIcTLaO8xs\nv5n9b+X27yHmbAdmtsLM+gb9q7PaNrw2Y6j3XPK6bIyZzTCzn5vZhspJpZ8YZrvGXp/unuhN0V8c\nmyX1SBolaa2kC07Z5kpJP6l8fYmkXyc9R1FuMZ/Pd0haFXrWdrhJepukeZLWDXM/r83knktel409\nn1Mlzat8PVbS75JoZxp78nFOnrpa0vclyd2fljS+8oYthorzfEoSb2rH4O5PStpXYxNemzHFeC4l\nXpexuftOd19b+fqApOc19Jykhl+faUQ+zslTp26zvco2iMR5PiVpYeWfbz8xszdkM1oh8dpMFq/L\nJphZr6J/JT19yl0Nvz65vkwxPCNplrsfMrMrJf23osNYgZB4XTahciLpw5Juq+zRtySNPfntkmYN\n+n5G5ddO3WZmnW0Qqft8uvsBdz9U+fqnkkaZ2VnZjVgovDYTwuuycZULOz4s6QF3f6TKJg2/PtOI\n/ImTp8ysW9HJU6tO2WaVpBukE2fU7nf3vhRmKYK6z+fgNTkze4uiQ2M5T2F4puHXinltNmbY55LX\nZVPuk7TR3b86zP0Nvz4TX67xGCdPuftjZnaVmW2WdFDSTUnPURRxnk9J/2Bm/yLpiKR+SdeEmzjf\nzGylpJKkiWa2TdJSSd3itdmwes+leF02xMzeKul6SevN7FlFV/e9Q9GRdU2/PjkZCgAKjI//A4AC\nI/IAUGBEHgAKjMgDQIEReQAoMCIPAAVG5AGgwIg8ABTY/wNSYQBlvos07AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f51883e2ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linearconv(121)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that as the number of points `nx` increases, the wave convects a shorter and shorter distance.  The number of time iterations we have advanced the solution at is held constant at `nt = 20`, but depending on the value of `nx` and the corresponding values of `dx` and `dt`, a shorter time window is being examined overall.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Learn More\n",
    "-----\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It's possible to do rigurous analysis of the stability of numerical schemes, in some cases. Watch Prof. Barba's presentation of this topic in **Video Lecture 9** on You Tube."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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\nAAAEKQAUhQIAAKAAAAAEKQAUhQAAAAAAAAAAAAAAQpAKQpAKAAAAAAAAAAIUhQBCkAAACgAAAAAA\nAAAAQpAAAAoAAAAAAABCkAFIUCAACgAAAABCkAFIUAAAAAAAAAAAAAAAEApCkAoAAAAAAAAAAhSF\nAEKQAAAKAAAAAAAAAABCkAAACgAAAAAAAEKQAUhQIAAKAAAAAEKQAUhQAAAAAAAAAAAAAAQoAEKQ\nCgAAAAAAAAACFIUAQpAAAAoAAAACFIUAAQCghQIAUAAAAAAAAAQoAhSFAAAAAAAIAKQoAhQAAAAA\nAACFAAEAFIUAQpAKCFAAAAAAAAAAAAAAAAAAAAQpAKTsUkvusAAUCFAAhQQAUEAoAAAAAAABCkAF\nIUACACgACAoAAEAFIUAAAAAAEKABCkAoAAEAAFBAKAAAAAEKAAAAAAAAAAAAAAARpNafYCT1Ft9k\nAKAAAAAhSAUgAFAAAAAAAAIUgApCgQAAUEKAAAAhSACkKAAAAAAAAAIUAAAAIUACFIBQAAAAAAAA\nAAAAAEAFBABQCAAUAQoAAAAAQAAABSFIBQAAIUAQoIAKQoAAAAAAAAAAgApCgAAAAAAAAAAAAAAE\nAFAAAAACFAEKAAAAAhQBnvlZCxcE3uEkvbfTWzj5mS49enTa1H59TcQDI7MqTfCKXFPe13fX/QWO\n2UKZJtS31il3+vsawBE+rPPyFnPxfHlCH/wsekmp67p72v0PRAAoAAAAAAAAAAhQAAAAAAAAAAAE\nKAAAAAAAAAAIUAQoAAAAAAAAAAAAAABCgAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Z\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"400\"\n",
       "            height=\"300\"\n",
       "            src=\"https://www.youtube.com/embed/Yw1YPBupZxU\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x7f518833b940>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo('Yw1YPBupZxU')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<link href='http://fonts.googleapis.com/css?family=Fenix' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=Alegreya+Sans:100,300,400,500,700,800,900,100italic,300italic,400italic,500italic,700italic,800italic,900italic' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=Source+Code+Pro:300,400' rel='stylesheet' type='text/css'>\n",
       "<style>\n",
       "    @font-face {\n",
       "        font-family: \"Computer Modern\";\n",
       "        src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n",
       "    }\n",
       "    div.cell{\n",
       "        width:800px;\n",
       "        margin-left:16% !important;\n",
       "        margin-right:auto;\n",
       "    }\n",
       "    h1 {\n",
       "        font-family: 'Alegreya Sans', sans-serif;\n",
       "    }\n",
       "    h2 {\n",
       "        font-family: 'Fenix', serif;\n",
       "    }\n",
       "    h3{\n",
       "\t\tfont-family: 'Fenix', serif;\n",
       "        margin-top:12px;\n",
       "        margin-bottom: 3px;\n",
       "       }\n",
       "\th4{\n",
       "\t\tfont-family: 'Fenix', serif;\n",
       "       }\n",
       "    h5 {\n",
       "        font-family: 'Alegreya Sans', sans-serif;\n",
       "    }\t   \n",
       "    div.text_cell_render{\n",
       "        font-family: 'Alegreya Sans',Computer Modern, \"Helvetica Neue\", Arial, Helvetica, Geneva, sans-serif;\n",
       "        line-height: 135%;\n",
       "        font-size: 120%;\n",
       "        width:600px;\n",
       "        margin-left:auto;\n",
       "        margin-right:auto;\n",
       "    }\n",
       "    .CodeMirror{\n",
       "            font-family: \"Source Code Pro\";\n",
       "\t\t\tfont-size: 90%;\n",
       "    }\n",
       "/*    .prompt{\n",
       "        display: None;\n",
       "    }*/\n",
       "    .text_cell_render h1 {\n",
       "        font-weight: 200;\n",
       "        font-size: 50pt;\n",
       "\t\tline-height: 100%;\n",
       "        color:#CD2305;\n",
       "        margin-bottom: 0.5em;\n",
       "        margin-top: 0.5em;\n",
       "        display: block;\n",
       "    }\t\n",
       "    .text_cell_render h5 {\n",
       "        font-weight: 300;\n",
       "        font-size: 16pt;\n",
       "        color: #CD2305;\n",
       "        font-style: italic;\n",
       "        margin-bottom: .5em;\n",
       "        margin-top: 0.5em;\n",
       "        display: block;\n",
       "    }\n",
       "    \n",
       "    .warning{\n",
       "        color: rgb( 240, 20, 20 )\n",
       "        }  \n",
       "</style>\n",
       "<script>\n",
       "    MathJax.Hub.Config({\n",
       "                        TeX: {\n",
       "                           extensions: [\"AMSmath.js\"]\n",
       "                           },\n",
       "                tex2jax: {\n",
       "                    inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
       "                    displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
       "                },\n",
       "                displayAlign: 'center', // Change this to 'center' to center equations.\n",
       "                \"HTML-CSS\": {\n",
       "                    styles: {'.MathJax_Display': {\"margin\": 4}}\n",
       "                }\n",
       "        });\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.core.display import HTML\n",
    "def css_styling():\n",
    "    styles = open(\"../styles/custom.css\", \"r\").read()\n",
    "    return HTML(styles)\n",
    "css_styling()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
